package day25;

// 属于提交不通过！（因为int类型的数字长度有限制，不能输入超长的数字）

// 数根（直到只有一位数为止！）
// 数根计算：各个位上的数字相加，直到最后只有一位数字（循环 + 递归）

/* 但理论上没错！
import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int num = in.nextInt();
            // 开始计算数根
            int ret = numRoot(num);
            System.out.println(ret);
        }

        //int ret = numRoot(39);
    }

    // 计算树根
    private static int numRoot(int num) {
        */
/* 使用了 递归+循环
        if(num / 10 == 0) {
            // 说明只有一位数
            return num;
        }
        // 说明需要进行计算
        int ret = 0;
        while (num != 0) {
            ret += num%10;
            num /= 10;
        }
        // 出来说明 num/10==0 也就是此时第一轮计算结束
        // 判断ret是否只有一位
        while (ret/10 != 0) { // 这里应该使用while，而不是if 因为如果递归结果还不满足就继续递归！
            // 说明不是一位
           ret = numRoot(ret); // 注意该方法是有返回值的！！
        }
        return ret;  // 此时只有一位，满足条件
         *//*


        // 只使用循环:更加简单！
        final int base = 10;
        while (num >= base) {
            // 进行计算 在这里要更新num的值
            int tmp = num;
            num = 0;
            while (tmp != 0) {
                num += tmp % base;
                tmp /= base;
            }
        }
        // 出来说明此时只有一位数
        return num;
    }
}
*/


// 通过版本！

// 为了能够输入自由长度，使用String类型作为输入，最后在去字母时转为int类型计算就行
import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 因为后期测试的时候会有很长的一大串数字出现，所以不使用int类型，
        // 直接使用String类型，只要最后每个字母-'0'，每个字母就可以转换为数字类型了
        // 此时也就可以直接进行相加了
        while(in.hasNext()) {
            String str = in.next();
            // 拿str每一个字符去计算树根
            int ret = numRoot(str);
            System.out.println(ret);
        }

        //int ret = numRoot(39);
    }

    // 计算数根（字符串）
    private static int numRoot(String str) {
        int root = 10;
        while(root > 9) {
            root = 0;
            String tmp = str;
            for(int i=0; i<tmp.length(); i++) {
                // 拿到的每一位转为数字（-'0'）后进行相加
                root += str.charAt(i)-'0';
            }
            // 出来说明，已经计算完一次，要进行循环时应该更新str为root对应的String类型
            str = String.valueOf(root);
        }
        // 出来说明此时root已经满足条件
        return root;
    }



}

